PICMUS challenge: experiment, resolution-distortion test
This example reads (or downloads if the data is not local) a dataset used in the PICMUS challenge and beamforms it with USTB's general beamformer. A 75 plane-wave sequence was recorded with a Verasonics Vantage 256 research scanner and a L11 probe (Verasonics Inc., Redmond, WA). The dataset was recorded on a CIRS Multi-Purpose Ultrasound Phantom (Model 040GSE) to estimate the method resolution and geometric distortion.
by Alfonso Rodriguez-Molares alfonso.r.molares@ntnu.no and Olivier Bernard olivier.bernard@insa-lyon.fr
$Last updated: 2017/09/15$
Contents
Getting the data
We define the local path and the url where the data is stored
% data location url='http://ustb.no/datasets/'; % if not found data will be downloaded from here filename='PICMUS_experiment_resolution_distortion.uff'; % checks if the data is in your data path, and downloads it otherwise. % The defaults data path is under USTB's folder, but you can change this % by setting an environment variable with setenv(DATA_PATH,'the_path_you_want_to_use'); tools.download(filename, url, data_path);
What's inside?
This dataset should contain the following structures: * channel_data, * beamformed_data and, * scan
We can check it out with the index function
display=true;
content = uff.index([data_path filesep filename],'/',display);
UFF: Contents of \\kant\ifi-ansatt-u08\omrindal\Repos\USTB_summer_student_2021\data\PICMUS_experiment_resolution_distortion.uff at / - /beamformed_data: beamformed_data [uff.beamformed_data] size(1,1) - /channel_data: channel_data [uff.channel_data] size(1,1) - /scan: scan [uff.linear_scan] size(1,1)
Plotting beamformed_data
We can read the beamformed_data object and plot it
b_data=uff.read_object([data_path filesep filename],'/beamformed_data');
b_data.plot();
UFF: reading beamformed_data [uff.beamformed_data] UFF: reading sequence [uff.wave] [====================] 100%
Loading channel data & scan
The file also contain channel_data and scan. We read it so we can replicate the beamformed image in the UFF file.
channel_data=uff.read_object([data_path filesep filename],'/channel_data'); scan=uff.read_object([data_path filesep filename],'/scan');
UFF: reading channel_data [uff.channel_data] UFF: reading sequence [uff.wave] [====================] 100%
Beamforming
We define a pipeline, and the corresponding transmit and apodization windows, and launch it.
pipe=pipeline(); pipe.channel_data=channel_data; pipe.scan=scan; % receive apodization pipe.receive_apodization.window=uff.window.tukey50; pipe.receive_apodization.f_number=1.7; % transmit apodization pipe.transmit_apodization.window=uff.window.tukey50; pipe.transmit_apodization.f_number=1.7; % launch beamforming b_data_new=pipe.go({midprocess.das postprocess.coherent_compounding});
USTB General beamformer MEX v1.1.2 .............done!
Comparing results
We plot both images side by side.
figure; b_data.plot(subplot(1,2,1),'Original'); b_data_new.plot(subplot(1,2,2),'New');